package com.idea.zd.sys.design.adapter;

/**
 * @author zzy
 * @Date 2018/8/7 下午4:27
 * 适配器模式 把一个类的接口变换成客户端所期待的另一种接口，
 * 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作
 */
public class AdapterTest {

    public static void main(String [] args){
        Socket socket = new Socket();
        //标准三孔
        ThreePlug threePlug = new ThreePlugImpl();
        socket.charge(threePlug);

        //通过适配器实现两孔
        TwoPlug twoPlug = new TwoPlugImpl();
        Adapter adapter = new Adapter(twoPlug);
        socket.charge(adapter);
    }
}

/**
 * 三孔插头 源：需要适配的接口
 */
interface ThreePlug {

    /**
     * 插上
     */
    void plug();
}

class ThreePlugImpl implements ThreePlug{

    @Override
    public void plug() {
        System.out.println("插入三孔插头");
    }
}

/**
 * 两孔插头 目标接口：这就是所期待得到的接口
 */
interface TwoPlug {

    /**
     * 插上
     */
    void plug();
}

class TwoPlugImpl implements TwoPlug {

    @Override
    public void plug() {
        System.out.println("插入两孔插头");
    }
}

/**
 * 适配器：适配器把源接口转换成目标接口
 */
class Adapter implements ThreePlug {

    private TwoPlug twoPlug;

    public Adapter(TwoPlug twoPlug) {
        this.twoPlug = twoPlug;
    }

    @Override
    public void plug() {
        System.out.println("适配两孔插头");
        twoPlug.plug();
    }
}

/**
 * 只支持三孔的插座
 */
class Socket {

    public void charge(ThreePlug threePlug){
        threePlug.plug();
        System.out.println("充电中");
    }
}
